
#include "hal_tim.h"
#include "timer3.h"
#include "bt.h"
#include "interrupt.h"

void hal_tim0_init(unsigned short period)
{
	unsigned short arr_value;                // 寄存器值
    unsigned short count_value;              // 计数值
    stc_bt_mode0_cfg_t tim0_config_struct; // 初始化配置结构体

    /* 结构体初始化清零 */
    DDL_ZERO_STRUCT(tim0_config_struct);

    /* Timer外设时钟使能 */
    Sysctrl_SetPeripheralGate(SysctrlPeripheralBaseTim, TRUE); //Base Timer外设时钟使能
    
    tim0_config_struct.enWorkMode = BtWorkMode0;                  //定时器模式
    tim0_config_struct.enCT       = BtTimer;                      //定时器功能，计数时钟为内部PCLK
    tim0_config_struct.enPRS      = BtPCLKDiv16;                  //PCLK/256
    tim0_config_struct.enCntMode  = Bt16bitArrMode;               //自动重载16位计数器/定时器
    tim0_config_struct.bEnTog     = FALSE;
    tim0_config_struct.bEnGate    = FALSE;
    tim0_config_struct.enGateP    = BtGatePositive;
    Bt_Mode0_Init(TIM0, &tim0_config_struct);                     //TIM0 的模式0功能初始化

	/* 设置重载值(ARR = 0x10000 - 周期) */
    arr_value = 0x10000 - period;
    Bt_M0_ARRSet(TIM0, arr_value);

    /* 设置计数初值 */
    count_value = 0x10000 - period;
    Tim3_M0_Cnt16Set(count_value);

    Bt_ClearIntFlag(TIM0, BtUevIrq);          // 清中断标志
    Bt_Mode0_EnableIrq(TIM0);                 // 使能TIM0中断(模式0时只有一个中断)
    EnableNvic(TIM0_IRQn, IrqLevel0, TRUE);   // TIM0 开中断
	
	Bt_M0_Run(TIM0);
}

void hal_tim1_init(unsigned short period)
{
	unsigned short arr_value;                // 寄存器值
    unsigned short count_value;              // 计数值
    stc_bt_mode0_cfg_t tim1_config_struct; // 初始化配置结构体

    /* 结构体初始化清零 */
    DDL_ZERO_STRUCT(tim1_config_struct);

    /* Timer外设时钟使能 */
    Sysctrl_SetPeripheralGate(SysctrlPeripheralBaseTim, TRUE); //Base Timer外设时钟使能
    
    tim1_config_struct.enWorkMode = BtWorkMode0;    // 定时器模式
    tim1_config_struct.enCT       = BtTimer;        // 定时器功能，计数时钟为内部PCLK
    tim1_config_struct.enPRS      = BtPCLKDiv256;   // PCLK/256
    tim1_config_struct.enCntMode  = Bt16bitArrMode; // 自动重载16位计数器/定时器
    tim1_config_struct.bEnTog     = FALSE;
    tim1_config_struct.bEnGate    = FALSE;
    tim1_config_struct.enGateP    = BtGatePositive;
    Bt_Mode0_Init(TIM1, &tim1_config_struct);       // TIM0 的模式0功能初始化

	/* 设置重载值(ARR = 0x10000 - 周期) */
    arr_value = 0x10000 - period;
    Bt_M0_ARRSet(TIM1, arr_value);

    /* 设置计数初值 */
    count_value = 0x10000 - period;
    Tim3_M0_Cnt16Set(count_value);

    Bt_ClearIntFlag(TIM1, BtUevIrq);          // 清中断标志
    Bt_Mode0_EnableIrq(TIM1);                 // 使能TIM0中断(模式0时只有一个中断)
    EnableNvic(TIM1_IRQn, IrqLevel1, TRUE);   // TIM0 开中断
	
	Bt_M0_Run(TIM1);
}
